﻿<?xml version="1.0" encoding="UTF-8"?>
<!--  Convertisseur de documents article-fb en DocBook 5-->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xlink="http://www.w3.org/1999/xlink">

    <xsl:strip-space elements="*"/>

    <xsl:output method="xml" encoding="UTF-8" indent="no"/>

    <xsl:attribute-set name="docbook5ns">
        <xsl:attribute name="xmlns">http://docbook.org/ns/docbook</xsl:attribute>
        <xsl:attribute name="version">5</xsl:attribute>
        <xsl:attribute name="class">journalarticle</xsl:attribute>
        <xsl:attribute name="xml:id">
            <xsl:choose>
                <xsl:when test="@xml:id">
                    <xsl:value-of select="@xml:id"/>
                </xsl:when>
                <xsl:otherwise>
                    <xsl:value-of select="generate-id()"/>
					<!-- FIXME: autoIDentifier -->
				</xsl:otherwise>
            </xsl:choose>
        </xsl:attribute>

    </xsl:attribute-set>

    <xsl:template match="article">
        <xsl:element name="article" use-attribute-sets="docbook5ns">
            <xsl:if test="@xml:lang">
                <xsl:copy-of select="@xml:lang"/>
            </xsl:if>
            <xsl:apply-templates/>
        </xsl:element>
    </xsl:template>


    <!-- traitement par défaut -->

    <xsl:template match="*">
        <xsl:param name="message">pas de modèle pour <xsl:value-of select="local-name()"/></xsl:param>
        <xsl:message>
            <xsl:value-of select="$message"/>
        </xsl:message>
        <xsl:comment>
            <xsl:value-of select="$message"/>
        </xsl:comment>
    </xsl:template>


    <!-- méta-informations transformées -->

    <xsl:template match="tête" name="info">
        <xsl:element name="info">
            <xsl:apply-templates/>
        </xsl:element>
    </xsl:template>

    <xsl:template match="auteur">
        <xsl:element name="author">
            <xsl:element name="personname">
                <xsl:apply-templates/>
            </xsl:element>
        </xsl:element>
    </xsl:template>

    <xsl:template match="éditeur">
        <xsl:element name="editor">
            <xsl:element name="orgname">
                <xsl:apply-templates/>
            </xsl:element>
        </xsl:element>
    </xsl:template>
	
    <xsl:template match="publieur">
		<xsl:element name="publishername">
			<xsl:apply-templates/>
		</xsl:element>
    </xsl:template>

    <xsl:template match="réviseur[1]">
        <xsl:param name="reviewintro">Revu par&#xa0;: </xsl:param>
        <xsl:element name="releaseinfo">
            <xsl:value-of select="$reviewintro"/>
            <xsl:value-of select="normalize-space()"/>
            <xsl:for-each select="following-sibling::réviseur">
                <xsl:value-of select="concat(', ',normalize-space())"/>
            </xsl:for-each>
        </xsl:element>
    </xsl:template>

    <xsl:template match="réviseur">
        <!-- géré par réviseur[1]-->
    </xsl:template>
	
    <xsl:template match="résumé">
        <xsl:element name="abstract">
            <xsl:element name="simpara">
                <xsl:apply-templates/>
            </xsl:element>
        </xsl:element>
    </xsl:template>

    <xsl:template match="sujet[1]">
        <xsl:element name="subjectset">
            <xsl:element name="subject">
                <xsl:element name="subjectterm">
                    <xsl:apply-templates/>
                </xsl:element>
            </xsl:element>
            <xsl:for-each select="following-sibling::sujet">
                <xsl:element name="subject">
                    <xsl:element name="subjectterm">
                        <xsl:apply-templates/>
                    </xsl:element>
                </xsl:element>
            </xsl:for-each>
        </xsl:element>
    </xsl:template>

    <xsl:template match="sujet">
        <!-- sujet[1] est prioritaire et fait tout le boulot --></xsl:template>

    <xsl:template match="issn | source">
        <xsl:variable name="contenu">
            <xsl:choose>
                <xsl:when test="normalize-space(@url) != ''">
                    <xsl:value-of select="@url"/>
                </xsl:when>
                <xsl:when test="normalize-space(@url) = '' and normalize-space() = ''">
                    <xsl:text>???</xsl:text>
                </xsl:when>
                <xsl:otherwise>
                    <xsl:value-of select="normalize-space()"/>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:variable>
        <xsl:variable name="classe">
            <xsl:choose>
                <xsl:when test="self::issn">issn</xsl:when>
                <xsl:when test="@url">uri</xsl:when>
                <xsl:when
                    test="
                        contains($contenu,'http//') or
                        contains($contenu,'ftp//') or
                        contains($contenu,'www.')"
                    >uri</xsl:when>
                <xsl:otherwise>other</xsl:otherwise>
            </xsl:choose>
        </xsl:variable>

        <xsl:element name="bibliosource">
            <xsl:attribute name="class">
                <xsl:value-of select="$classe"/>
            </xsl:attribute>
            <xsl:if test="$classe='other'">
                <xsl:attribute name="otherclass">
                    <xsl:text>unknown</xsl:text>
                </xsl:attribute>
            </xsl:if>
            <xsl:value-of select="$contenu"/>
        </xsl:element>

    </xsl:template>

    <!-- types blocs -->

    <xsl:template match="section[not(titre)] | corps">
        <xsl:apply-templates/>
    </xsl:template>

    <xsl:template match="section">
        <xsl:element name="section">
            <xsl:element name="info">
                <xsl:apply-templates select="titre"/>
                <xsl:apply-templates select="image | illustration | source | date"/>
            </xsl:element>
            <xsl:apply-templates select="paragraphe"/>
        </xsl:element>
    </xsl:template>

    <xsl:template match="section[@classe='encadré']">
        <xsl:element name="sidebar">
            <xsl:element name="info">
                <xsl:apply-templates select="titre"/>
                <xsl:apply-templates select="image | illustration | source | date"/>
            </xsl:element>
            <xsl:apply-templates select="paragraphe"/>
        </xsl:element>
    </xsl:template>

    <xsl:template match="titre">
        <xsl:element name="title">
            <xsl:apply-templates/>
        </xsl:element>
    </xsl:template>
	
    <xsl:template match="paragraphe">
        <xsl:element name="simpara">
            <xsl:apply-templates/>
        </xsl:element>
    </xsl:template>


    <!-- images -->

    <xsl:template match="image">
        <xsl:param name="info">
            <xsl:apply-templates select="auteur"/>
            <xsl:apply-templates select="légende | description" mode="info"/>
            <!-- FIXME appliquer davantage de modèles -->
        </xsl:param>

        <xsl:element name="mediaobject">
            <xsl:if test="$info != ''">
                <xsl:element name="info">
                    <xsl:copy-of select="$info"/>
                </xsl:element>
            </xsl:if>

            <xsl:call-template name="gen-imageobject"/>

            <xsl:apply-templates select="légende | description" mode="caption"/>

        </xsl:element>
    </xsl:template>

    <xsl:template name="gen-imageobject">
        <xsl:element name="imageobject">
            <xsl:element name="imagedata">
                <xsl:attribute name="fileref">
                    <xsl:value-of select="descendant-or-self::image/@url"/>
                </xsl:attribute>
                <!-- suppression de hauteur -->
                <xsl:if test="descendant-or-self::image/@largeur">
                    <xsl:attribute name="width">
                        <xsl:value-of select="descendant-or-self::image/@largeur"/>
                    </xsl:attribute>
                </xsl:if>
            </xsl:element>
        </xsl:element>
    </xsl:template>

    <xsl:template match="description | légende" mode="info">
        <xsl:element name="abstract">
            <xsl:element name="simpara">
                <xsl:apply-templates/>
            </xsl:element>
        </xsl:element>
    </xsl:template>

    <xsl:template match="description | légende" mode="caption">
        <xsl:element name="caption">
            <xsl:element name="simpara">
                <xsl:apply-templates/>
            </xsl:element>
        </xsl:element>
    </xsl:template>


    <!-- types alignés -->

    <xsl:template match="note">
        <xsl:element name="note">
            <xsl:element name="simpara">
                <xsl:apply-templates/>
            </xsl:element>
        </xsl:element>
    </xsl:template>

    <xsl:template match="lien">
        <xsl:element name="link">
            <xsl:attribute name="xlink:href">
                <xsl:value-of select="@url"/>
            </xsl:attribute>
            <xsl:apply-templates/>
        </xsl:element>
    </xsl:template>

    <xsl:template match="propriété">
        <xsl:element name="copyright">
            <xsl:apply-templates/>
        </xsl:element>
    </xsl:template>

    <xsl:template match="année">
        <xsl:element name="year">
            <xsl:apply-templates/>
        </xsl:element>
    </xsl:template>

    <xsl:template match="détenteur">
        <xsl:element name="holder">
            <xsl:apply-templates/>
        </xsl:element>
    </xsl:template>

    <xsl:template match="date">
        <xsl:element name="date">
            <xsl:apply-templates/>
        </xsl:element>
    </xsl:template>

    <xsl:template match="emphase">
        <xsl:element name="emphasis">
            <xsl:apply-templates/>
        </xsl:element>
    </xsl:template>

    <xsl:template match="citation">
        <xsl:element name="quote">
            <xsl:apply-templates/>
        </xsl:element>
    </xsl:template>

    <xsl:template match="définition">
		<!-- FIXME: comprendre le mécanisme de définitions d'abbréviations de docbook-->
        <xsl:element name="abbrev">
			<xsl:apply-templates/>
			<xsl:if test="@abr">
				<xsl:element name="alt">
					<xsl:value-of select="@abr"/>
				</xsl:element>
			</xsl:if>
        </xsl:element>
    </xsl:template>


</xsl:stylesheet>
